package com.chj.service.impl;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import javax.annotation.Resource;

import org.springframework.stereotype.Service;

import com.chj.dao.ECarDAO;
import com.chj.dao.OrderDAO;
import com.chj.entity.ECar;
import com.chj.entity.ECarModel;
import com.chj.entity.Message;
import com.chj.entity.ResultModel;
import com.chj.entity.User;
import com.chj.service.ECarService;
import com.chj.util.GenerateSequenceUtil;

@Service
public class ECarServiceImpl implements ECarService {

    @Resource
    private ECarDAO eCarDAO;

    @Resource
    private OrderDAO orderDAO;

    @Override
    public int addECarToUser(ECar eCar, User user) {

        eCar.setEcarPk(GenerateSequenceUtil.getUUID());

        return eCarDAO.save(eCar);
    }

    @Override
    public int deleteECar(String eCarId) {

        return eCarDAO.delete(eCarId);
    }

    @Override
    public ECar getECar(String eCarId) {

        return eCarDAO.get(eCarId);
    }

    @Override
    public List<ECar> getECarList(String type) {

        return null;
    }

    @Override
    public List<ECarModel> getECarsByUserId(String userId) {
        //新建List
        List<ECarModel> eCarModelList = new ArrayList<ECarModel>();

        //取当前车位表里面获取车的信息
        List<ECar> eCarListByUserId = eCarDAO.getECarListByUserId(userId, 0, 0);
        //去订单表里面获取当前车的状态
        ECarModel eCarModel = null;
        for (ECar eCar : eCarListByUserId) {
            eCarModel = new ECarModel();
            eCarModel.seteCar(eCar);

            //当前时间 加上车号去订单表里面查询，如果有生效的订单，且充电区间在时间段内的为充电中，其他未否
            if(orderDAO.queryECarStatus(eCar.getEcarPk(), new Date())) {
                eCarModel.seteCarStatu("充电中");
            } else {
                eCarModel.seteCarStatu("空闲中");
            }

            eCarModelList.add(eCarModel);
        }

        return eCarModelList;
    }

    @Override
    public int modifyECar(String eCarId) {

        return 0;
    }

    @Override
    public ResultModel deletePersonECar(String ecarId) {

        if (orderDAO.queryECarStatus(ecarId, new Date())){
            return new ResultModel(0, false, "该电动汽车正在充电中，无法进行删除！");
        } else if ( eCarDAO.delete(ecarId) > 0 ) {
            return new ResultModel(1, true, "");
        } else {
            return new ResultModel(0, false, "出现系统错误");
        }
    }

    @Override
    public int getECarListSizeBy(String userId) {

        return eCarDAO.getECarListSizeBy(userId);
    }

    @Override
    public List<ECar> getOrderListBy(String userId, int page, int rows) {
        
        return eCarDAO.getECarListSizeBy(userId, page, rows);
    }

    @Override
    public List<ECarModel> getECarsByUserIdAndBeginAndEnd(String userPk
                                                        , String chargeTimeBegin
                                                        , String chargeTimeEnd) {
        //新建List
        List<ECarModel> eCarModelList = new ArrayList<ECarModel>();

        //取当前车位表里面获取车的信息
        List<ECar> eCarListByUserId = eCarDAO.getECarListByUserId(userPk, 0, 0);
        //去订单表里面获取当前车的状态
        ECarModel eCarModel = null;
        for (ECar eCar : eCarListByUserId) {
            eCarModel = new ECarModel();
            eCarModel.seteCar(eCar);

            //当前时间 加上车号去订单表里面查询，如果有生效的订单，且充电区间在时间段内的为充电中，其他未否
            if(orderDAO.queryECarStatusBy(eCar.getEcarPk(), chargeTimeBegin, chargeTimeEnd)) {
                eCarModel.seteCarStatu("充电中");
            } else {
                eCarModel.seteCarStatu("空闲中");
            }

            eCarModelList.add(eCarModel);
        }

        return eCarModelList;
    }

}
